<%@page import="kegg.Pathway"%>
<%@page import="keggacces.Descarga"%>
<%@page import="analisis.matrizContingencia.MatrizContingencia"%>
<%@page import="archivos.UbicacionArchivos"%>
<%@page import="java.text.NumberFormat"%>
<%@page import="java.text.DecimalFormat"%>
<%@page import="graphs.GraphADT"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="java.io.File"%>
<%@page import="utils.OS"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>


<!--==============================content================================-->

<%
    /*Se recogen las variables necesarias de la sesion*/
    String redObligatoria = (String) session.getAttribute("tituloFObligatorio");//Nombre del fichero obligatorio (con .sif)
    String opcionEleg = (String) session.getAttribute("opcionElegida");//Opcion elegida
    String carpeta = (String) session.getAttribute("carpeta");//Organismo seleccionado
    String columna = "";

    /*Se obtiene la ruta raiz*/
    String separator = OS.getDirectorySeparator();
    String ubicacionWebInf = application.getRealPath(separator + "WEB-INF" + separator + "datos");

    /*Se inicializan varios objetos*/
    List<List> listaValoresEst = new ArrayList();//Lista de valores a mostrar en la tabla
    MatrizContingencia mtc = new MatrizContingencia();//Objeto para llamar a los metodos de esta clase
    File directorioMisRedesOpci = null;
    List<String> listaPathways = new ArrayList();//Lista de pathways a mostrar

    /*Se obtiene el identificador de la sesion*/
    String redesUsuario = session.getId();

    String css = "";//Dependiendo si la opcion es 'sif' o 'kegg' tendrá un css u otro

    /*Si la opcion elegida es sif, se tieen que recoger el nombre del segundo fichero subido y compararlos entre ellos*/
    if (opcionEleg.equals("sif")) {
        columna = "Entry Network";
        /*Se obtiene el fichero de entrada del usuario*/
        
        

        /*Se genera el grafo a partir del fichero de entrada del usuario*/
        GraphADT grafoUser = (GraphADT)session.getAttribute("grafoUser");

        /*se recoge el nombre del segundo fichero*/
        String redOpcional = (String) session.getAttribute("tituloFOpcional");

        /*Se obtiene la ubicacion del segundo fichero (almacenado en la carpeta creada "MisRedes-IDSESSION")*/
        String ubicacionOpci = ubicacionWebInf + separator + "Comparison" + separator + redesUsuario + separator + redOpcional;
        directorioMisRedesOpci = new File(ubicacionOpci);

        /*Se genera el grafo a partir del fichero de entrada del usuario*/
        GraphADT grafoUser2 = (GraphADT)session.getAttribute("grafoUser2");

        /*Se obtiene la lista de valores a partir de los dos grafos (que a su vez se han obtenido a partir de los
         ficheros de entrada)*/
        List<Double> listaEst = mtc.matrizCont(grafoUser, grafoUser2);
        listaValoresEst.add(listaEst);

        /*Se le quita la extensión al nombre*/
        redOpcional = redOpcional.substring(0, redOpcional.length() - 4);
        listaPathways.add(redOpcional);

        /*Se asigna el css apropiado*/
        css = "width: 30px; height: 20px; margin-left: 40px;";

    }else if (opcionEleg.equals("kegg")) {
        //Si la opcion elegida es kegg, la red de entrada se tendrá que comparar con todos los organismos de Kegg
        columna = "Pathway";
        /*Se obtiene el fichero de entrada del usuario*/
        //String ubicacionObli = ubicacionWebInf + separator + "Comparison" + separator + redesUsuario + separator + redObligatoria;
        //File directorioMisRedesObli = new File(ubicacionObli);

        /*Se genera el grafo a partir del fichero de entrada del usuario*/
        GraphADT grafoUser = (GraphADT)session.getAttribute("grafoUser");

        List<Pathway> ps = Descarga.descargaOrganismo(carpeta);
        session.setAttribute("ps", ps);

        /*Se obtiene la ruta de todos los organismos*/
        //String rutaTodos = ubicacionWebInf + separator + carpeta;
        //File nombres = new File(rutaTodos + separator + "kegg" + separator +carpeta + ".txt");
        /*Se obtiene el nombre de todos los pathways (no se incluyen los ficheros con tamaño 0)*/
        //listaPathways = Txt.leeFicheroPathway(nombres, uv.ubicacionCarpeta(carpeta));

        //File pathway = null;
        /*Se hace un recorrido de todos los pathways y se va comparando uno a uno con el de entrada*/
        for (int i = 0; i < ps.size(); i++) {
            listaPathways.add(ps.get(i).getTitle());
            /*Para calular los valores de comparacion necesitan recivir dos grafos*/
            MatrizContingencia mtc2 = new MatrizContingencia();//Objeto para llamar a los metodos de esta clase
            listaValoresEst.add(mtc2.matrizCont(grafoUser, ps.get(i).getRed()));
        }

        /*Se asigna el css apropiado*/
        css = "width: 30px; height: 20px; float: left; margin-left: 15px;";
    } else if (opcionEleg.equals("go")) {
        columna = "GO-Term";
        /*Se obtiene el fichero de entrada del usuario*/
        GraphADT grafoUser = (GraphADT)session.getAttribute("grafoUser");

        /*se recoge el nombre del segundo fichero*/
        String redOpcional = (String) session.getAttribute("tituloFOpcional");

        /*Se obtiene la ubicacion del segundo fichero (almacenado en la carpeta creada "MisRedes-IDSESSION")*/
        String ubicacionOpci = ubicacionWebInf + separator + "go" + separator + redesUsuario + separator + redOpcional;
        directorioMisRedesOpci = new File(ubicacionOpci);

        /*Se genera el grafo a partir del fichero de entrada del usuario*/
        GraphADT grafoUser2 = (GraphADT)session.getAttribute("grafoUser2");

        /*Se obtiene la lista de valores a partir de los dos grafos (que a su vez se han obtenido a partir de los
         ficheros de entrada)*/
        List<Double> listaEst = mtc.matrizCont(grafoUser, grafoUser2);
        listaValoresEst.add(listaEst);

        /*Se le quita la extensión al nombre*/
        redOpcional = redOpcional.substring(0, redOpcional.length() - 4);
        listaPathways.add(redOpcional);

        /*Se asigna el css apropiado*/
        css = "width: 30px; height: 20px; margin-left: 40px;";
        

    }

    /*Se crea un objeto NumberFormat de tipo DecimalFormat para formatear los valores*/
    NumberFormat formater = new DecimalFormat("0.000");


    /*Se pinta la tabla que será recogida mediante Out*/
    String ficPhp = "<table>"
            + "<thead>"
            + "<tr>"
            + "<th>" + columna + "</th>"
            + "<th>Precision</th>"
            + "<th>Recall %</th>"
            + "<th>FMeasure</th>"
            + "<th>Mean Error</th>"
            + "<th>Jac. Similarity</th>"
            + "<th>FScore</th>"
            + "<th>Specificity %</th>"
            + "<th>False Positive%</th>"
            + "<th>Seg.Accuracy %</th>"
            + "<th>Grafo</th>"
            + "</tr>"
            + "</thead>";

    ficPhp += "<tbody>";
    for (int i = 0; i < listaValoresEst.size(); i++) {
        List lista = listaValoresEst.get(i);

        ficPhp += "<tr>"
                + "<td>" + listaPathways.get(i) + "</td>";

        for (int j = 0; j < lista.size(); j++) {

            ficPhp += "<td>" + formater.format(lista.get(j)) + "</td>";

        }

        ficPhp += "<td><form id='view-form' action='../utilidades/graphNet.jsp' method='post'>"
                + "<input name='opcionRedEntrada' id='opcionRedEntrada' type='hidden' value='null'/>"
                + "<input name='tituloP' id='tituloP' type='hidden' value='" + listaPathways.get(i) + "'/>"
                + "<input class='view-button' title='View graph' name='nameTitulo' id='nameTitulo' formtarget='_blank' type='submit' style='" + css + "' value=''/>"
                + "</form>";

        if (opcionEleg.equals("kegg") || opcionEleg.equals("go")) {
            ficPhp += "<form id='download-form' action='../utilidades/downloadFile.jsp' method='post'>"
                    + "<input name='tituloPDownload' id='tituloPDownload' type='hidden' value='" + listaPathways.get(i) + "'/>"
                    + "<input class='download-button' title='Download' name='nameTituloDownload' id='nameTituloDownload' formtarget='_blank' type='submit' style='" + css + "' value=''/>"
                    + "</form>";
        }
        ficPhp += "</td>"
                + "</tr>";

    }

    ficPhp += "</tbody>";
    ficPhp += "</table>";

    out.append(ficPhp);
%>